package net.hn.hnms.biz.plan.service;


import net.hn.hnms.biz.plan.domain.IntegratedReporting;
import net.hn.hnms.biz.plan.mapper.IntegratedReportingMapper;
import net.hn.hnms.biz.plan.request.ProductionMarketingCountReq;
import net.hn.hnms.biz.plan.request.SalesPlanReq;
import net.hn.hnms.biz.plan.vo.*;
import net.hn.hnms.biz.plan.vo.energy.OtherMonthCostVo;
import net.hn.hnms.biz.plan.vo.energy.YearEnergyStatisticsVo;
import net.hn.hnms.sys.common.core.domain.ResponsePage;
import net.hn.hnms.sys.common.mybatis.core.page.PageQuery;
import org.springframework.web.multipart.MultipartFile;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author ly
 * 生产统计服务层
 * @date 2022-08-26
 */
public interface IStatisticService {

    /**
     * 生产统计
     *
     * @return ProduceStasticVO
     */
    ProduceStasticVO produceForBigScreen(String date, String mineCode);

    ProduceStasticVO gtyProduceForBigScreen(String date, String mineCode);

    /**
     * 月产量情况
     *
     * @return ProduceStasticVO
     */
    MonthYieldVo yieldByMonth(String mineCode);

    /**
     * 年产量情况
     *
     * @return ProduceStasticVO
     */
    YearYieldVo yieldByYear(String mineCode);

    /**
     * 月度计划/完成情况
     *
     * @return ProduceStasticVO
     */
    CompletionRateVo completionRate(String mineCode, String planDrivageName);

    /**
     * 获取掘进进尺米数
     *
     * @return CompletionRateVo
     */
    Map<String, BigDecimal> getDrivagefootage(String mineCode, String planDrivageName);

    /**
     * 月度计划/完成情况
     *
     * @return ProduceStasticVO
     */
    CompletionRateVo completionRateByYear(String mineCode, String planDrivageName);

    /**
     * 月产量曲线
     *
     * @return Map
     */
    List<PlanCurveVo> outputCurve(String mineCode);

    /**
     * 计划月产量曲线
     *
     * @return Map
     */
    List<Map<String, Object>> planOutputCurve(String mineCode);

    /**
     * 经营综合概览-生成计划统计
     *
     * @param month 月份
     * @return 各计划完成情况
     */
    Map<String, PlanStatisticVO> planComplete(Integer month, String mineCode);

    /**
     * 公司端-生成计划统计
     *
     * @param month 月份
     * @return 各计划完成情况
     */
    Map<String, PlanStatisticVO> planComplete2(Integer month, String mineCode);

    /**
     * 经营综合概览-其他生产计划
     *
     * @param month 月份
     * @return 其他计划完成情况
     */
    Map<String, PlanStatisticVO> planOther(Integer month, String mineCode);

    /**
     * 经营综合概览-经营状况
     *
     * @param month 月份
     * @return ExecutionInfoVO
     */
    ExecutionInfoVO otherActual(Integer month, String mineCode);

    /**
     * 经营综合概览-经营状况
     *
     * @param month 月份
     * @return WeggVO
     */
    WeggVO wegg(Integer month, String mineCode);

    /**
     * 经营综合概览-销售计划
     *
     * @param month 月份
     * @return Map<String, List < MonthValue>>
     */
    List<MonthValue> salePlan(Integer month, String mineCode);

    List<MonthValue> gtySalePlan(Integer month, String mineCode);

    List<MonthValue> gtySaleCompanyPlan(Integer month, String companyCode);

    List<MonthValue> groupSaleCompanyPlan(Integer month, String companyCode);

    List<ExecutionSalesVo> executionSaleCount(SalesPlanReq req);

    List<ExecutionSalesVo> groupExecutionSaleCount(SalesPlanReq req);

    List<ExecutionSalesVo> SaleBarChartCount(SalesPlanReq req) throws IllegalAccessException;

    List<ExecutionSalesVo> GroupSaleBarChartCount(SalesPlanReq req);

    List<EnvironmentProtectionVo> getEnvironmentProtection() throws Exception;

    List<EnvironmentProtectionVo> selectEnvironmentProtection() throws Exception;

    List<EnvironmentProtectionVo> getMonitoringData() throws Exception;

    Double getEfficientTransmissionByMonth() throws Exception;

    List<ProductionMarketingCountVo> selectProductionMarketing(ProductionMarketingCountReq req);

    ProductionMarketingCountVo selectProductionMarketingCountByCoalType(ProductionMarketingCountReq req);


    /**
     * 生产成本分析-其他生产成本
     *
     * @param year  年份
     * @param month 月份
     * @return Map<String, ExecutionCostVO>
     */
    List<MonthValue> otherCost(Integer year, Integer month, String mineCode);


    /**
     * 生产综合能效分析-采掘比
     *
     * @param year 年份
     * @return Map<String, BigDecimal>
     */
    List<MonthValue> drivagePercent(Integer year, String mineCode);

    /**
     * 生产综合能效分析-销售计划与执行
     *
     * @param year 年份
     * @return Map<String, MonthValue>
     */
    List<MonthValue> salePlanAndExecution(Integer year, String mineCode);

    /**
     * 生产综合能效分析-能效趋势
     *
     * @param year 年份
     * @return Map<String, MonthValue>
     */
    List<MonthValue> efficiencyTrend(Integer year, String mineCode);

    /**
     * 生产综合能效分析-产量计划与执行
     *
     * @param year 年份
     * @return List<MonthValue>
     */
    List<MonthValue> planOutputAndRealOutput(Integer year, String mineCode);

    /**
     * 生产综合能效分析-产量与销售
     *
     * @param year 年份
     * @return List<MonthValue>
     */
    List<MonthValue> realOutputAndSale(Integer year, String mineCode);

    /**
     * 生产综合能效分析-吨煤生产成本
     *
     * @param year 年份
     * @return Map<Integer, BigDecimal>
     */
    List<MonthValue> coalProductCost(Integer year, String mineCode);


    /**
     * 生产综合能效分析-全员工效
     *
     * @param year 年份
     * @return Map<Integer, BigDecimal>
     */
    List<MonthValue> staffWork(Integer year, String mineCode);

    /**
     * 生产综合能效分析-回采/掘进趋势
     *
     * @param type 回采0 掘进 1
     * @param year 年份
     * @return List<MonthValue>
     */
    List<MonthValue> miningOrDrivageTrend(Integer type, Integer year, String mineCode);


    List<MonthYieldVo> yieldStatisticalAnalysis(Integer year, Integer month, String mineCode);

    void timingYieldStatisticalAnalysis();

    StatisticalYearVo stock(Integer year, String mineCode);

    StatisticalYearVo backCoal(Integer year, String mineCode);

    StatisticalYearVo coalSlime(Integer year, String mineCode);

    StatisticalYearVo shaleAmount(Integer year, String mineCode);

    StatisticalYearVo sale(Integer year, String mineCode);

    StatisticalWeekVo statisticSale(Date date, Date endDate, String mineCode);

    List<MonthValue> achievementsLastSixMonths(String companyCode);

    List<MonthValue> gtySalePlanLastSixMonths(String companyCode);


    void importExcel(MultipartFile file, IntegratedReportingMapper integratedReportingMapper);


    ResponsePage<IntegratedReporting> getIntegratedReporting(String date, String name, PageQuery pageQuery);

    List<IntegratedReporting> getYieldSaleStatistics();

    List<IntegratedReporting> getDayYieldSaleStatistics(int month);


    List<YearEnergyStatisticsVo> getYearOutputCurve(String mineCode, Integer year);

    List<MonthValue> getYearOutputEnergyCurve(String mineCode, Integer year);

    List<MonthValue> getElectricityAndOutput(Integer year, String mineCode);

    List<OtherMonthCostVo> otherMonthCost(String searchDate, String mineCode);

    List<MonthValue> getProductionWaterSupply(Integer year, String mineCode);
}
